CodePipelineからCodeBuildの環境変数が設定できるようになりました!

CodePipelineからCodeBuildの環境変数が設定できるようになりました!

Clock Icon2019.10.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは!AWS事業本部の島川です。

CodePipelineからCodeBuildの環境変数が設定ができるようになりました。
AWS CodePipeline Enables Setting Environment Variables on AWS CodeBuild Build Jobs

You can now set environment variables for CodeBuild build jobs in your pipeline.

これまでは複数環境下の場合、環境ごとにCodeBuildプロジェクトを用意⇒環境変数を設定するということが必要でした。
CodePipelineもその分の数が必要でした。

それが今回のアップデートにより、1つのCodeBuildプロジェクトのみで複数環境に対応できるようになりました。
CodePipelineの追加だけで済むようになります!

やってみた

CodeBuild の Docker サンプル(DockerイメージをECRにプッシュする)を使って、CodePipelineからCodeBuildの環境変数を設定してみます。

GitHubにコードをアップする。

今回はソース元をGitHubを選択しました。
まずは検証で使うDockerfileとbuildspec.ymlをGitHubにアップします。
どちらもrootに配置します。

  • Dockerfile
FROM golang:1.12-alpine AS build
#Install git
RUN apk add --no-cache git
#Get the hello world package from a GitHub repository
RUN go get github.com/golang/example/hello
WORKDIR /go/src/github.com/golang/example/hello
# Build the project and send the output to /bin/HelloWorld
RUN go build -o /bin/HelloWorld

FROM golang:1.12-alpine
#Copy the build's output binary from the previous build container
COPY --from=build /bin/HelloWorld /bin/HelloWorld
ENTRYPOINT ["/bin/HelloWorld"]
  • buildspec.yml
version: 0.2

phases:
  install:
    runtime-versions:
      docker: 18
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG

CodePipelineの設定をする。

マネジメントコンソールから設定していきます。

パイプラインの作成をクリックします。

[Step1]パイプラインの名前とロール名を入力。

[Step2]ソースステージはGitHubを選択(先ほどコードをアップしたレポジトリを選択します)

[Step3]ビルドステージはもちろんCodeBuildを選択します。
今回はここからCodeBuildも作成します。

CodeBuildの設定内容は画像をご参照ください。

追加されていることを確認します。

お...!環境変数の追加という項目見つけました。今回は一旦CodePipeline作成をしてしまい、あとから設定をいじることにします。

また、CodeBuild作成時にロールも一緒に作成されましたがそのロールに"ecr:CreateRepository"の権限を付与する必要があります。今回はすでに存在するAmazonEC2ContainerRegistryPowerUserのポリシーを付与で対応します。

[Step4]ECRへのプッシュが目的なのでデプロイはスキップします。

設定内容を確認してパイプラインを作成します。
作成後自動的にパイプラインが動きますが、環境変数設定してない&ECRレポジトリが存在していないので失敗します。

ECRレポジトリを作成する。

プッシュ先が必要なのでECRレポジトリを作成します。環境変数でも設定するので覚えておきましょう。

CodePipelineから環境変数を設定する。

作成したCodePipelineのステージを編集します。

展開されたらここをクリックします。

環境変数を追加します。

buildspec.ymlで以下4つの環境変数を定義しているのでそれを埋めて保存します。

名前 入力
AWS_DEFAULT_REGION ap-northeast-1(リージョン) プレーンテキスト
AWS_ACCOUNT_ID 123456789012(AWSアカウントID) プレーンテキスト
IMAGE_TAG latest(イメージのタグ) プレーンテキスト
IMAGE_REPO_NAME test-ecr(ECRレポジトリ名) プレーンテキスト

実行

変更をリリースします。

成功したようなので、ECRでちゃんとアップできているか確認します。

できました!

さいごに

CodePipeline側でCodeBuildの環境変数の設定ができることを確認しました。汎用的なCodeBuildを用意しておけばCodePipelineのみの設定で済むようになり、設定の見通しが良くなったと思います。

既にCodePipelineを運用している場合でも切り替えが容易なので、適用をご検討してみてください!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.